package me.disenia.labs.android.enchingatown_free;

import oauth.signpost.OAuth;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;

public class MainActivity extends Activity {
	/** Logger **/
	public static final String TAG = "AndroidTwitterSample";
	
	/** Strings **/
	public static final String TWEET_TEXT = "TWEET_TEXT";
	public static final String BADGE_DESCRIPTION = "BADGE_DESCRIPTION";
	public static final String BADGE_ID = "BADGE_ID";

	private static final String[] badgeIds = {
		"247",
		"250",
		"253",
		"257",
		"260",
		"263",
		"240",
		"237",
		"227",
		"230",
		"234",
		"189",
		"202",
		"193",
		"199",
		"196",
		"184",
		"181",
		"168",
		"171",
		"178",
		"6",
		"18",
		"20",
		"24",
		"25",
		"36",
		"39",
		"44",
		"49",
		"53",
		"66",
		"109",
		"112",
		"30",
		"33",
		"42",
		"47",
		"56",
		"63"
	};
	
	private static final String[] badges = {
		"Desveloper",
		"Malabarista",
		"Misma ropa",
		"no son enchiladas",
		"dale una vuelta",
		"Zen office",
		"Cara de Zombie",
		"Orquesta del Titanic",
		"Gym Hunter",
		"Sindrome de Estocolmo",
		"Mama en llamas",
		"I need a miracle",
		"Still loading",
		"Final countdown",
		"Horas extras",
		"inspiration momentum",
		"ineption",
		"mad men",
		"hearing protection",
		"mad max",
		"multitab",
		"juntitis",
		"bomba de humo",
		"bombero",
		"cambiatitis",
		"hundido",
		"mail man",
		"have a break",
		"coffe junkie",
		"procastin",
		"cuenta ganada",
		"home office",
		"keyboard bistró",
		"jetlag",
		"ad machine",
		"madrugador",
		"no country for sleepy men",
		"conference king",
		"san lunes",
		"friday crudo"
	};
	
	private static final String[] descriptions = {
	/*Desveloper*/	"Un desveloper es, según la mitología de varios países, una criatura que trabaja como developer programando hasta altas horas de la madrugada, al punto de ver aparecer caritas felices que hablan entre las líneas de su código.",
	/*Malabarista*/	"La habilidad de Malabarista con la que manejas 5 proyectos a la vez hace que tu trabajo actual no sea más que la antesala de tu próxima aparición en el Cirque du Soleil.",
	/*Misma ropa*/	"Misma Ropa es el badge que necesitas si tu variedad de ropa limpia disponible se aproxima peligrosamente a 0 por pasar tanto tiempo en la oficina.",
	/*no son enchiladas*/	"De esos días en que tienes ganas de decir que sí, sí, sí, que entiendes perfectamente todo lo que has de hacer, pero de ahí a que esté todo para dentro de una hora… pues no. Oiga, ¡que No Son Enchiladas!",
	/*dale una vuelta*/	"Que levante la mano todo aquel que haya recibido el comentario 'Dale una Vuelta' al presentar una idea que, por lo que se ve, necesitaba un poco más de trabajo… y una vuelta.",
	/*Zen office*/	"Cuando te tengan absolutamente harto… inhala, exhala, inhala, exhala, inhala, exhala… bienvenido a la meditación del Zen Office: el Zenchingatown!",
	/*Cara de Zombie*/	"Cara de Zombie es el badge que debes usar si, al despertar cada mañana, podrías elegir entre regresar un día más a la oficina o iniciar una carrera de actor presentándote al casting de 'The Walking Dead'.",
	/*Orquesta del Titanic*/	"Cuando todos los demás se van y terminas siendo el único que se queda trabajando es un buen momento para sentirte como la Orquesta del Titanic. Ánimo, no te hundas!",
	/*Gym Hunter*/	"Tres veces te apuntaste a un gimnasio para ponerte en forma. Tres veces dejaste de ir porque no tenías tiempo después del trabajo. Cuando comiences a pensar en apuntarte por cuarta vez, serás todo un Gym Hunter.",
	/*Sindrome de Estocolmo*/	"Reconócelo, pese a todo (y a veces, pese a todos), te gusta estar EnChingaTown. Tienes el Síndrome de Estocolmo.",
	/*Mama en llamas*/	"Si estás EnChingaTown y además eres mamá entonces ni todos los badges del mundo pueden expresar tu estado de EnChingaTown. Pero vamos a intentarlo con éste: Mamá en Llamas!",
	/*I need a miracle*/	"Será una intervención divina la que te saque de este apuro, porque en este planeta ya no queda nadie que pueda ayudarte. You Need A Miracle, suerte!",
	/*Still loading*/	"Si tu conexión a Internet es leeeeeeeeeeeeeeeeeeeeenta, al menos aún puedes entrar y hacer check-in en Still Loading.",
	/*Final countdown*/	"El tiempo se acerca peligrosamente para esa entrega o presentación, it’s the Final Countdown! 10, 9, 8, 7, 6, 5, 4, 3, 2, 1…",
	/*Horas extras*/	"¿Vives jornadas en las que la hora de salida se parece peligrosamente a la hora de entrada del siguiente día? Usa el badge de Horas Extras para que te reconozcan como el héroe que eres.",
	/*inspiration momentum*/	"La inspiración viene a ti sin necesidad de que te caiga una manzana en la cabeza. Estás en Modo Inspiration Momentum!",
	/*ineption*/	"Este badge es para cuando de veras no puedes creer que tengas que lidiar con esa cadena de ineptos. El fenómeno, largamente estudiado a lo largo de la historia, se denomina Ineption.",
	/*mad men*/	"Si y sólo si crees que Don Draper y su ego deberían trabajar para ti y TU EGO, haz check-in en este badge, príncipe de los Mad Men.",
	/*hearing protection*/	"¿Todos a tu alrededor hablan? ¿Un momento a solas con tu playlist? ¿Un compañero disfruta el Papanamericano a todo volumen? Entonces te será muy útil tener Hearing Protection.",
	/*mad max*/	"Eres un Mad Max cuando pasas tanto tiempo en el tráfico que llegas media hora tarde a cualquier sitio, y por ello tu ritmo EnChingaTown se incrementa un 10%.",
	/*multitab*/	"Una persona Multitab es aquella que no se siente alarmada por tener más de 40 pestañas abiertas en su navegador, achacando la lentitud de la red a la conexión de su oficina.",
	/*juntitis*/	"¿Estás en OTRA junta preguntándote qué haces allí o en la cantidad de cosas de provecho que podrías estar haciendo si no estuvieras presente? Felicidades, estás en Modo Juntitis agudo.",
	/*bomba de humo*/	"Ojalá tuvieras una Bomba de Humo para desaparecer como un ninja, y que otro hiciera aquello que has de hacer tú.",
	/*bombero*/	"¿Apagas fuegos propios y ajenos? ¿Recibes más mails de SOS que invitaciones a cumpleaños? Indudablemente, eres un Bombero, bombero.",
	/*cambiatitis*/	"La Cambiatitis no es grave, pero sí molesta. ¿Cómo saber si la padeces? Si te piden tres o más veces diarias cambios de tamaño, posición, color o tipografía en logos, layouts o textos, acompañados del comentario “es rápido, ¿no?”, sufres de Cambiatitis.",
	/*hundido*/	"Estás Hundido cuando sabes que si te zambulleras en tu lista de cosas pendientes necesitarías mucho oxígeno para poder llegar a la superficie.",
	/*mail man*/	"Según estándares oficiales, eres Mail Man cuando recibes más de 50 correos de trabajo en un solo día.",	
	/*have a break*/	"Si no dejas de pensar en lo mucho que necesitas tres segundos de respiro para tomar fuerzas, entonces Have a Break!",	
	/*coffe junkie*/	"Si temes que en un análisis sanguíneo te encontraran un poco de sangre en el café, probablemente seas un Coffee Junkie.",
	/*procastin*/	"¿Con mucho por hacer pero con tres minutos más para ese vídeo que llegó por correo poder ver? Procrastin es tu badge.",
	/*cuenta ganada*/	"Gracias a tu esfuerzo y al de tus compañeros llegó esa nueva Cuenta Ganada. Así podrás seguir EnChingaTown una temporada más.",
	/*home office*/ 	"Si ya no sabes si vives en la oficina o trabajas en tu casa, estás en Modo Home Office.",	
	/*keyboard bistró*/		"Si no te levantas de tu escritorio ni para comer, y cuando lo haces desearías que la comida que encargas a domicilio te llegara directamente por e-mail para no perder tiempo en recogerla, entonces eres el rey indiscutible del Keyboard Bistró.",
	/*jetlag*/		"Si te parece que tu reloj debiera tener más de cuatro o cinco agujas para saber exactamente en qué huso horario estás, ¡felicidades! Eres un auténtico viajero del tiempo y por eso eres bienvenido en este badge del Jet Lag.",
	/*ad machine*/	"Si eres un hombre (o mujer) orquesta, que entrega con éxito todo lo que le solicitan, en el formato que sea y a la hora señalada, felicidades, eres un Ad Machine.",
	/*madrugador*/	"Si llegas a la oficina antes que los/las recepcionistas de la oficina, felicidades, eres un Madrugador.",
	/*no country for sleepy men*/	"Duermes tan poco que ya piensas que en este lugar las ovejas son un animal en extinción. Bienvenido a No country for sleepy men.",
	/*conference king*/		"Si necesitas estar en una sala vacía para poder charlar con mucha gente, entonces debes ser un Conference Call King.",
	/*san lunes*/	"En Lunes se le reza a San Lunes la oración del Lunes: ”Dios te salve San Lunes, lleno eres de chamba, déjanos llegar impunes al próximo Viernes de Samba.”",
	/*friday crudo*/	"Oración del Friday Crudo en viernes por la mañana: “Qué buena fiesta la de anoche. Qué mal me encuentro hoy. Nunca más. Ya quiero que sea jueves de nuevo”."
	};
	
	private static final int[] pictures = {
		R.drawable.desveloper,
		R.drawable.malabarista,
		R.drawable.misma_ropa,
		R.drawable.no_son_enchiladas,
		R.drawable.dale_la_vuelta,
		R.drawable.zen_office,
		R.drawable.cara_de_zombie,
		R.drawable.orquesta_del_titanic,
		R.drawable.gym_hunter,
		R.drawable.sindrome_de_estocolmo,
		R.drawable.mama_en_llamas,
		R.drawable.i_need_a_miracle,
		R.drawable.still_loading,
		R.drawable.final_countdown,
		R.drawable.horas_extra,
		R.drawable.inspiration_momentum,
		R.drawable.ineption,
		R.drawable.mad_men,
		R.drawable.hearing_protection,
		R.drawable.mad_max,
		R.drawable.multi_tab,
		R.drawable.juntitis,
		R.drawable.bomba_de_humo,
		R.drawable.bombero,
		R.drawable.cambiatitis,
		R.drawable.hundido,
		R.drawable.mail_man,
		R.drawable.need_a_break,
		R.drawable.coffee_yunkie,
		R.drawable.procastin,
		R.drawable.cuenta_ganada,
		R.drawable.home_office,
		R.drawable.keyboard_bistro,
		R.drawable.jetlag,
		R.drawable.machine_ad,
		R.drawable.madrugador,
		R.drawable.no_country_for_sleepy_men,
		R.drawable.conference_king,
		R.drawable.san_lunes,
		R.drawable.friday_crudo
	};
	
	private SharedPreferences prefs;
	
	private class EfficientAdapter extends BaseAdapter {
		private LayoutInflater mInflater;
		
		public EfficientAdapter(Context context) {
			mInflater = LayoutInflater.from(context);
		}
		
		public int getCount() {
			return badges.length;
		}

		public Object getItem(int position) {
			return position;
		}
		
		public long getItemId(int position) {
			return position;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			final ViewHolder holder;
			if (convertView == null) {
				holder = new ViewHolder();
				convertView = mInflater.inflate(R.layout.planet_item, null);
				holder.planet = (TextView) convertView.findViewById(R.id.planet);
				holder.badge_description = (TextView) convertView.findViewById(R.id.badge_description);
				holder.planetImage = (ImageView) convertView.findViewById(R.id.planetImage);
				//holder.btnTweetThis = (Button) convertView.findViewById(R.id.btnTweetThis);
				holder.planetImage.setOnClickListener(new OnClickListener() {
					public void onClick(View v) {
						try {
							Intent i = new Intent(getBaseContext(), TwittHandler.class);
							//String message = "My age in " + holder.planet.getText().toString() + " is " + holder.ageInDays.getText().toString() + " days or " + holder.ageInYears.getText().toString() + " years old! via http://goo.gl/YcMG4 #PlanetariumAge";
							String message = "Acabo de hacer checkin en " + holder.planet.getText().toString() + " #enchingatown";
							i.putExtra(TWEET_TEXT, (CharSequence) message );
							i.putExtra(BADGE_DESCRIPTION, holder.badge_description.getText().toString());
							startActivity(i);
							Log.d(TAG, "TwittHandler launched");
						}
						catch (Exception e){
							Log.d(TAG, e.toString());
						}
					}
				});
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}

			holder.planet.setText(badges[position]);
			holder.badge_description.setText(descriptions[position]);
			if (position < pictures.length){
				holder.planetImage.setImageResource(pictures[position]);
			} else {
				holder.planetImage.setImageResource(R.drawable.twitterbutton);
			}
			return convertView;
		}
		
		class ViewHolder {
			TextView planet;
			TextView badge_description;
			ImageView planetImage;
			@SuppressWarnings("unused")
			Button btnTweetThis;
		}
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
	    MenuInflater inflater = getMenuInflater();
	    inflater.inflate(R.menu.badges_menu, menu);
	    return true;
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
	    // Handle item selection
		switch (item.getItemId()) {
			case R.id.badges_menu_login_twitter:
				onTweetDisabled();
		        return true;
			case R.id.badges_menu_clear_credentials:
				onTweetEnabled();
		        return true;
		    case R.id.badges_menu_exit:
		    	exitApp();
		    	return true;
		    default:
		    return super.onOptionsItemSelected(item);
	    }
	}
	
	@Override
	public boolean onPrepareOptionsMenu (Menu menu) {
		menu.getItem(0).setEnabled(!TwitterUtils.isAuthenticated(prefs));
		menu.getItem(1).setEnabled(TwitterUtils.isAuthenticated(prefs));
		return true;
	}
	
	private void exitApp(){
		finish();
	}
	
	private void onTweetEnabled(){
    	if (TwitterUtils.isAuthenticated(prefs)) {
    		clearCredentials();
    	} 
    }
    
	private void onTweetDisabled() {
    	if (!TwitterUtils.isAuthenticated(prefs)){
    		Intent i = new Intent(getApplicationContext(), PrepareRequestTokenActivity.class);
    		startActivity(i);
    	}
    }
	
	private void clearCredentials() {
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
		final Editor edit = prefs.edit();
		edit.remove(OAuth.OAUTH_TOKEN);
		edit.remove(OAuth.OAUTH_TOKEN_SECRET);
		edit.commit();
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.badges_list);

		this.prefs = PreferenceManager.getDefaultSharedPreferences(this);
		
		/*** ADS PLACEMENT STARTS ***/
		LinearLayout layout = (LinearLayout)findViewById(R.id.ad_layout);
		AdView adView = new AdView(this, AdSize.BANNER, "a14e5c6b1b0b3a3");
		layout.addView(adView);
		AdRequest request = new AdRequest();
	    request.setTesting(true);

	    adView.loadAd(request); 
	    /*** ADS PLACEMENT ENDS ***/

	    /*
		ListView l1 = (ListView) findViewById(R.id.ListView01);
		l1.setAdapter(new EfficientAdapter(this));
		ColorDrawable divcolor = new ColorDrawable(Color.CYAN);
		l1.setDivider(divcolor);
		l1.setDividerHeight(1);
	     */
		GridView l1 = (GridView) findViewById(R.id.gridView);
		l1.setAdapter(new EfficientAdapter(this));
		//ColorDrawable divcolor = new ColorDrawable(Color.CYAN);
	}
}